package com.designPatterns.singleton;

/**
 * 单例模式:延迟加载
 * 先检查后执行,在类加载时并不初始化,只有在调用getInstance()时才会初始化. 这种方式是线程安全的,但是性能并不高,在每次获取实例时都要加锁
 * 来获取实例,导致其他线程阻塞,这不是最优方案.并非所有场景都需要去同步,这会造成性能上的极大损耗,故提出一种双重校验的单例模式以解决该问题
 * Created by houjinxin on 16/3/5.
 */
public class SingletonLazyLoadEnhance {

    private static SingletonLazyLoadEnhance instance;

    private SingletonLazyLoadEnhance(){
        System.out.println("我是延迟加载增强版的类");
    }

    public static synchronized SingletonLazyLoadEnhance getInstance(){
        if(instance == null) {
            instance = new SingletonLazyLoadEnhance();
        }
        return instance;
    }

    /**
     * 该方法用于测试懒加载是否成功
     */
    public static void doSomething(){
        System.out.println("干了一些事情");
    }
}
